﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using System.IO;

namespace MapEditor
{
    class Cursor
    {
        //variables nécéssaire à l'affichage
        private TilesTexture tiles;
        private SpriteBatch spritebatch;

        private Texture2D cursor;  //curseur trait plein
        private Texture2D cursor2; //curseur pointillé

        public bool mouseOverMyDisplay = false; //determine si la souris est au dessus de la fenétre XNA. modifié dans Form1.

        /// <summary>
        /// dessine un seul curseur à la position indiqué.
        /// </summary>
        /// <param name="x">position sur x</param>
        /// <param name="y">position sur y</param>
        private void drawSingleCursor(int x, int y)
        {
            Rectangle r = new Rectangle(x * tiles.Width, y * tiles.Height, tiles.Width, tiles.Height);
            spritebatch.Draw(cursor, r, Color.White);
        }

        /// <summary>
        /// dessine le(s) curseurs, si la souris est au dessus de la fenétre XNA, en fonction du brush.
        /// </summary>
        /// <param name="brushValue"> taille du brush</param>
        public void drawCursor(int brushValue)
        {
            if (mouseOverMyDisplay)
            {
                //rectangle définissant la position du curseur sur la grille en fonction de la position de la souris et de la résolution des tiles
                Rectangle r = new Rectangle((Mouse.GetState().X / tiles.Width) * tiles.Width,
                                            (Mouse.GetState().Y / tiles.Height) * tiles.Height, tiles.Width, tiles.Height);
                spritebatch.Begin();
                if (brushValue == 0)
                    spritebatch.Draw(cursor2, r, Color.White);
                else
                {
                    Utils.recursBrush(brushValue, new Vector2I(Mouse.GetState().X / tiles.Width, Mouse.GetState().Y / tiles.Height), drawSingleCursor);
                    Utils.resetRecursBrush();
                }
                spritebatch.End();
            }
        }

        public Cursor(TilesTexture tiles, SpriteBatch spritebatch, GraphicsDevice graphicsDevice)
        {
            this.tiles = tiles;
            this.spritebatch = spritebatch;

            using (FileStream fs = File.OpenRead("Images/cursor.png"))
                cursor = Texture2D.FromStream(graphicsDevice, fs);
            using (FileStream fs = File.OpenRead("Images/cursor2.png"))
                cursor2 = Texture2D.FromStream(graphicsDevice, fs);
        }
    }
}
